package com.ai.dmc.index.common.util;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import org.apache.log4j.Logger;

import net.sf.json.JSONObject;

/**
 * @Description : 运用反射将bean对象json化
 * 
 * @author : wucm
 * @date : 2015年7月23日 上午9:57:46
 * @version V1.0
 * 
 */
@SuppressWarnings("rawtypes")
public class JsonReflectUtil {
	private static Logger logger = Logger.getLogger(JsonReflectUtil.class);

	/**
	 * 
	 * @Description : 将bean对象json化（只获取String类型、基本类型的字段）
	 * @param obj
	 * @return
	 * @return JSONObject
	 * 
	 * @author : wucm
	 * @date : 2015年7月23日 上午9:59:18
	 * 
	 */
	public static JSONObject formatToJSON(Object obj) {
		JSONObject json = new JSONObject();

		if (null == obj) {
			return json;
		}

		Field[] fields = obj.getClass().getDeclaredFields();
		for (int i = 0; i < fields.length; i++) {
			Field field = fields[i];
			String name = field.getName();
			Class type = field.getType();

			// 只获取String类型、基本类型
			if (Modifier.isStatic(field.getModifiers())) {
				continue;
			}
			if (!"java.lang.String".equals(type.getName())
					&& !"java.lang.Boolean".equals(type.getName())
					&& !type.isPrimitive()) {
				continue;
			}

			try {
				PropertyDescriptor pd = new PropertyDescriptor(field.getName(),
						obj.getClass());
				Method getMethod = pd.getReadMethod();// 获得get方法
				Object o = getMethod.invoke(obj);// 执行get方法返回一个Object
				json.put(name, o);
			} catch (Exception e) {
				logger.debug(e.toString());
			}
		}

		return json;
	}
}
